﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
////喝汽水问题
////喝汽水，1瓶汽水1元，2个空瓶可以换一瓶汽水，给20元，可以喝多少汽水
//int main()
//{
//	int money = 20;
//	int pop = money;//初始汽水瓶数
//	int bottles = money;//初始空瓶数
//	int totalbott = money;//拥有过的空瓶数
//
//	while (bottles >= 2)
//	{
//		int exchange = bottles / 2;
//		pop += exchange;
//		totalbott += exchange;
//		bottles = bottles % 2 + exchange;//为换瓶后剩余的空瓶加上新喝出的空瓶
//	}
//	//换瓶处理(借一个空瓶，喝完还回去）
//	if (bottles == 1)
//	{
//		pop++;
//		totalbott++;
//		bottles = 0;//重置
//	}
//	printf("可以喝%d瓶汽水\n", pop);
//	printf("最终剩余空瓶数:%d\n", bottles);
//	printf("拥有过的空瓶数：%d\n", totalbott);
//	return 0;
//}


////打印菱形
//int main()
//{
//	int line = 0;
//	scanf("%d", &line);
//	//上半部分
//	for (int i = 0; i < line; i++)
//	{
//		for (int j = line - i; j >= 0; j--)
//		{
//			printf(" ");
//		}
//		for (int k = 0; k < 2 * i + 1; k++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	//下半部分
//	for (int i = line - 2; i >= 0; i--)
//	{
//		for (int j = line - i + 1; j > 0; j--)
//		{
//			printf(" ");
//		}
//		for (int k = 2 * i + 1; k > 0; k--)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}


////打印水仙花数
////求出0～100000之间的所有“水仙花数”并输出。
////“水仙花数”是指一个n位数，其各位数字的n次方之和恰好等于该数本身，
////如 : 153＝1 ^ 3＋5 ^ 3＋3 ^ 3，则153是一个“水仙花数”。
//int main()
//{
//	for (int i = 0; i < 100000; i++)
//	{
//		int count = 0;
//		int tmp = i;
//		while (tmp != 0)
//		{
//			count++;
//			tmp /= 10;
//		}
//		tmp = i;
//		int sum = 0;
//		while (tmp != 0)
//		{
//			sum += pow(tmp % 10, count);
//			tmp /= 10;
//		}
//		if (sum == i)
//		{
//			printf("%d\n", i);
//		}
//	}
//	return 0;
//}


//计算求和
//求Sn = a + aa + aaa + aaaa + aaaaa的前5项之和，其中a是一个数字
//例如：2 + 22 + 222 + 2222 + 22222
//int main()
//{
//	/*int a = 0;
//	scanf("%d", &a);
//	int Sn1 = a * 10 + a;
//	int Sn2 = Sn1 + a * 100;
//	int Sn3 = Sn2 + a * 1000;
//	int Sn4 = Sn3 + a * 10000;
//	int Sn = a + Sn1 + Sn2 + Sn3 + Sn4;
//	printf("%d", Sn);*/
//
//	return 0;
//}

//#include <math.h>
//int Sn(int n,int a)
//{
//	int sum = 0;
//	int tmp = 0;
//	for (int i = 0; i < n; i++)
//	{
//		tmp = tmp * 10 + a;
//		sum += tmp;
//	}
//	return sum;
//}
//int main()
//{
//
//	printf("%d", Sn(5,2));
//	return 0;
//}


//int main()
//{
//	int num = 10;
//	int n = num << 1;
//	printf("n = %d\n", n);
//	printf("num = %d\n", num);
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int num = 10;
//	int n = num >> 1;
//	printf("n = %d\n", n);
//	printf("num = %d\n", num);
//	return 0;
//}


//int main()
//{
//	int num1 = -3;
//	int num2 = 5;
//	printf("%d\n", num1 & num2);
//	printf("%d\n", num1 | num2);
//	printf("%d\n", num1 ^ num2);
//	printf("%d\n", ~0);
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	//交换
//	printf("交换前: a=%d b=%d\n", a, b);
//
//	a = a ^ b;//a' = a ^ b
//	b = a ^ b;//b = a'^ b = a ^ b ^ b = a
//	a = a ^ b;//a = a ^ b ^ a = b
//
//	printf("交换后: a=%d b=%d\n", a, b);
//
//	return 0;
//}

//int count1(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		if ((n % 2) == 1)
//			count++;
//		n /= 2;
//	}
//	return count;
//}

//int count1(int n)
//{
//	int i = 0;
//	int count = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if ((n >> i) & 1 == 1)
//			count++;
//	}
//	return count;
//}

//int count1(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	return count;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = count1(n);
//	printf("%d\n", r);
//	return 0;
//}

//00000000 00000000 00000000 00001111（补码）按位与
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000001 如果为1，说明给的补码的最低位为1；为0，则为0


//int main()
//{
//	int a = 6;
//	int b = 8;
//	int c = (a > b, a = b + 10, a, b = a + 1);
//	printf("%d", c);
//	return 0;
//}

//int arr[10];//创建数组 
//arr[9] = 10;//实⽤下标引⽤操作符。 
//[] 的两个操作数是arr和9

//void test1()
//{
//	printf("hehe\n");
//}
//void test2(const char* str)
//{
//	printf("%s\n", str);
//}
//int main()
//{
//	test1(); //这⾥的()就是作为函数调⽤操作符。 
//	test2("ni hao");//这⾥的()就是函数调⽤操作符。 
//	return 0;
//}

//struct Stu//自定义的
//{
//	//1个或多个成员
//	char name[20];//名字 
//	int age;//年龄 
//	char sex[5];//性别 
//	char id[20];//学号 
//	//...
//}; //分号不能丢 


//// 代码1：变量的定义
//struct Point
//{
//	int x;
//	int y;
//}p1; //声明类型的同时定义变量p1 
//struct Point p2; //定义结构体变量p2 
//
////代码2:初始化。 
//struct Point p3 = { 10, 20 };
//struct Stu //类型声明
//{
//	char name[15];//名字 
//	int age; //年龄 
//};
//struct Stu s1 = { "zhangsan", 20 };//初始化 
//struct Stu s2 = { .age = 20, .name = "lisi" };//指定顺序初始化 
//
////代码3 
//struct Node
//{
//	int data;
//	struct Point p;
//	struct Node* next;
//}n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化 
//struct Node n2 = { 20, {5, 6}, NULL };//结构体嵌套初始化 

//struct Peo
//	{
//		char name[30];
//		int age;
//		char tele[12];
//	};
//	
//struct Ebook
//{
//		struct Peo data[100];//可以存放100个人的信息
//	int count;//当前已经存的个数
//	};
//
//int main()
//	{
//		struct Peo p1 = {"zhangsan", 20, "15598888888"};
//		struct Ebook eb = { {{"wangwu", 19, "13396668866"},{"cuihua", 18, "18696866688"}},  0};
//	
//		printf("%s\n", p1.name);
//		printf("%d\n", p1.age);
//	    printf("%s\n", p1.tele);
//
// 	    printf("%s\n", eb.data[1].name);
//		printf("%d\n", eb.data[1].age);
//		printf("%s\n", eb.data[1].tele);
//		//. : 结构成员访问操作符
//		//结构体变量 . 结构体成员
//		return 0;
//	}


int main()
{
	char a = 20;//截断后存储到a中
	     //00000000000000000000000000010100
		//00010100 - a
	char b = 120;
	    //00000000000000000000000001111000
		//01111000 - b
	char c = a + b;
	    //00010100 - a
		//00000000000000000000000000010100
		//01111000 - b
		//00000000000000000000000001111000

		//00000000000000000000000000010100
		//00000000000000000000000001111000
		//00000000000000000000000010001100
		//10001100 - c
	printf("%d\n", c);
    	//% d - 以10进制的形式，打印一个有符号的整型(int)
		//11111111111111111111111110001100 - 补码
		//10000000000000000000000001110011
		//10000000000000000000000001110100 - 原码
		//- 116
	return 0;
}